home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CMCD0704.ISO / Software / Freeware / Comunicatii / htttrack / httrack-3.32-2.exe / {app} / src_win / WinHTTrack / HTTrackInterface.h < prev    next >
C/C++ Source or Header  |  2004-01-24  |  6KB  |  223 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #include "httrack-library.h"
  7. /**/
  8. #include "htsglobal.h"
  9. #include "htsbase.h"
  10. #include "htsopt.h"
  11.  
  12. extern int linput(FILE* fp,char* s,int max);
  13. extern int linput_trim(FILE* fp,char* s,int max);
  14. extern int linput_cpp(FILE* fp,char* s,int max);
  15. extern void rawlinput(FILE* fp,char* s,int max);
  16. extern int binput(char* buff,char* s,int max);
  17. extern int fexist(char* s);
  18. extern INTsys fsize(char* s);
  19. extern TStamp time_local(void);
  20.  
  21. extern char* concat(const char* a,const char* b);
  22. extern char* __fconv(char* a);
  23. extern char* fconcat(char* a,char* b);
  24. extern char* fconv(char* a);
  25. extern char* __fslash(char* a);
  26. extern char* fslash(char* a);
  27. extern char* convtolower(char* a);
  28. extern void hts_lowcase(char* s);
  29.  
  30. extern char* next_token(char* p,int flag);
  31.  
  32. // Engine internal variables
  33. typedef void (* htsErrorCallback)(char* msg, char* file, int line);
  34. extern HTSEXT_API htsErrorCallback htsCallbackErr;
  35. extern HTSEXT_API int htsMemoryFastXfr;
  36. /* */
  37. extern HTSEXT_API hts_stat_struct HTS_STAT;
  38. extern int _DEBUG_HEAD;
  39. extern FILE* ioinfo;
  40.  
  41.  
  42.  
  43.  
  44. // from htsbase.h
  45.  
  46. /* protected strcat, strncat and strcpy - definitely useful */
  47. #define strcatbuff(A, B) do { \
  48.   assertf( (A) != NULL ); \
  49.   if ( ! (B) ) { assertf( 0 ); } \
  50.   if (htsMemoryFastXfr) { \
  51.     if (sizeof(A) != sizeof(char*)) { \
  52.       (A)[sizeof(A) - 1] = '\0'; \
  53.     } \
  54.     strcat(A, B); \
  55.     if (sizeof(A) != sizeof(char*)) { \
  56.       assertf((A)[sizeof(A) - 1] == '\0'); \
  57.     } \
  58.   } else { \
  59.     unsigned int sz = (unsigned int) strlen(A); \
  60.     unsigned int szf = (unsigned int) strlen(B); \
  61.     if (sizeof(A) != sizeof(char*)) { \
  62.       assertf(sz + szf + 1 < sizeof(A)); \
  63.       if (szf > 0) { \
  64.         if (sz + szf + 1 < sizeof(A)) { \
  65.           memcpy((A) + sz, (B), szf + 1); \
  66.         } \
  67.       } \
  68.     } else if (szf > 0) { \
  69.       memcpybuff((A) + sz, (B), szf + 1); \
  70.     } \
  71.   } \
  72. } while(0)
  73. #define strncatbuff(A, B, N) do { \
  74.   assertf( (A) != NULL ); \
  75.   if ( ! (B) ) { assertf( 0 ); } \
  76.   if (htsMemoryFastXfr) { \
  77.     if (sizeof(A) != sizeof(char*)) { \
  78.       (A)[sizeof(A) - 1] = '\0'; \
  79.     } \
  80.     strncat(A, B, N); \
  81.     if (sizeof(A) != sizeof(char*)) { \
  82.       assertf((A)[sizeof(A) - 1] == '\0'); \
  83.     } \
  84.   } else { \
  85.     unsigned int sz = (unsigned int) strlen(A); \
  86.     unsigned int szf = (unsigned int) strlen(B); \
  87.     if (szf > (unsigned int) (N)) szf = (unsigned int) (N); \
  88.     if (sizeof(A) != sizeof(char*)) { \
  89.       assertf(sz + szf + 1 < sizeof(A)); \
  90.       if (szf > 0) { \
  91.         if (sz + szf + 1 < sizeof(A)) { \
  92.           memcpy((A) + sz, (B), szf); \
  93.           * ( (A) + sz + szf) = '\0'; \
  94.         } \
  95.       } \
  96.     } else if (szf > 0) { \
  97.       memcpybuff((A) + sz, (B), szf); \
  98.       * ( (A) + sz + szf) = '\0'; \
  99.     } \
  100.   } \
  101. } while(0)
  102. #define strcpybuff(A, B) do { \
  103.   assertf( (A) != NULL ); \
  104.   if ( ! (B) ) { assertf( 0 ); } \
  105.   if (htsMemoryFastXfr) { \
  106.     if (sizeof(A) != sizeof(char*)) { \
  107.       (A)[sizeof(A) - 1] = '\0'; \
  108.     } \
  109.     strcpy(A, B); \
  110.     if (sizeof(A) != sizeof(char*)) { \
  111.       assertf((A)[sizeof(A) - 1] == '\0'); \
  112.     } \
  113.   } else { \
  114.     unsigned int szf = (unsigned int) strlen(B); \
  115.     if (sizeof(A) != sizeof(char*)) { \
  116.       assertf(szf + 1 < sizeof(A)); \
  117.       if (szf > 0) { \
  118.         if (szf + 1 < sizeof(A)) { \
  119.           memcpy((A), (B), szf + 1); \
  120.         } else { \
  121.           * (A) = '\0'; \
  122.         } \
  123.       } else { \
  124.         * (A) = '\0'; \
  125.       } \
  126.     } else { \
  127.       memcpybuff((A), (B), szf + 1); \
  128.     } \
  129.   } \
  130. } while(0)
  131. #define strncpybuff(A, B, N) do { \
  132.   assertf( (A) != NULL ); \
  133.   if ( ! (B) ) { assertf( 0 ); } \
  134.   if (htsMemoryFastXfr) { \
  135.     if (sizeof(A) != sizeof(char*)) { \
  136.       (A)[sizeof(A) - 1] = '\0'; \
  137.     } \
  138.     strncpy(A, B, N); \
  139.     if (sizeof(A) != sizeof(char*)) { \
  140.       assertf((A)[sizeof(A) - 1] == '\0'); \
  141.     } \
  142.   } else { \
  143.     unsigned int szf = (unsigned int) strlen(B); \
  144.     if (szf > (unsigned int) (N)) szf = (unsigned int) (N); \
  145.     if (sizeof(A) != sizeof(char*)) { \
  146.       assertf(szf + 1 < sizeof(A)); \
  147.       if (szf > 0) { \
  148.         if (szf + 1 < sizeof(A)) { \
  149.           memcpy((A), (B), szf); \
  150.         } \
  151.       } \
  152.     } else { \
  153.       memcpybuff((A), (B), szf); \
  154.     } \
  155.   } \
  156. } while(0)
  157.  
  158.  
  159. // emergency log
  160. typedef void (*t_abortLog)(char* msg, char* file, int line);
  161. extern HTSEXT_API t_abortLog abortLog__;
  162. #define abortLog(a) abortLog__(a, __FILE__, __LINE__)
  163. #define abortLogFmt(a) do { \
  164.   FILE* fp = fopen("CRASH.TXT", "wb"); \
  165.   if (!fp) fp = fopen("/tmp/CRASH.TXT", "wb"); \
  166.   if (!fp) fp = fopen("C:\\CRASH.TXT", "wb"); \
  167.   if (fp) { \
  168.     fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '" __FILE__ "', line %d\r\n", __LINE__); \
  169.     fprintf(fp, "Reason:\r\n"); \
  170.     fprintf(fp, a); \
  171.     fprintf(fp, "\r\n"); \
  172.     fflush(fp); \
  173.     fclose(fp); \
  174.   } \
  175. } while(0)
  176.  
  177. #define _ ,
  178. #define abortLogFmt(a) do { \
  179.   FILE* fp = fopen("CRASH.TXT", "wb"); \
  180.   if (!fp) fp = fopen("/tmp/CRASH.TXT", "wb"); \
  181.   if (!fp) fp = fopen("C:\\CRASH.TXT", "wb"); \
  182.   if (fp) { \
  183.     fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '" __FILE__ "', line %d\r\n", __LINE__); \
  184.     fprintf(fp, "Reason:\r\n"); \
  185.     fprintf(fp, a); \
  186.     fprintf(fp, "\r\n"); \
  187.     fflush(fp); \
  188.     fclose(fp); \
  189.   } \
  190. } while(0)
  191. #define assertf(exp) do { \
  192.   if (! ( exp ) ) { \
  193.     abortLog("assert failed: " #exp); \
  194.     if (htsCallbackErr != NULL) { \
  195.       htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
  196.     } \
  197.     assert(exp); \
  198.     abort(); \
  199.   } \
  200. } while(0)
  201. /* non-fatal assert */
  202. #define assertnf(exp) do { \
  203.   if (! ( exp ) ) { \
  204.     abortLog("assert failed: " #exp); \
  205.     if (htsCallbackErr != NULL) { \
  206.       htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
  207.     } \
  208.   } \
  209. } while(0)
  210.  
  211. //
  212.  
  213. #define malloct(A)          malloc(A)
  214. #define calloct(A,B)        calloc((A), (B))
  215. #define freet(A)            do { assertnf((A) != NULL); if ((A) != NULL) { free(A); (A) = NULL; } } while(0)
  216. #define strdupt(A)          strdup(A)
  217. #define realloct(A,B)       ( ((A) != NULL) ? realloc((A), (B)) : malloc(B) )
  218. #define memcpybuff(A, B, N) memcpy((A), (B), (N))
  219.  
  220.  
  221. // various
  222. #define copychar(a) concat((a),NULL)
  223.